package code.springboot.idempotent.annotation;



import code.springboot.idempotent.keyresolver.KeyResolver;
import code.springboot.idempotent.keyresolver.impl.DefaultIdempotentKeyResolver;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.util.concurrent.TimeUnit;

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Idempotent {

    /**
     * 幂等 key
     * @return
     */
    String key() default "";

    /**
     * 幂等的超时时间
     * @return
     */
    int timeout() default 1;

    /**
     * 时间单位
     * @return
     */
    TimeUnit timeUnit() default TimeUnit.SECONDS;

    /**
     * 提示信息
     * @return
     */
    String message() default "请求重复, 请稍后重试";

    /**
     * 业务执行完成是否删除key
     * @return
     */
    boolean delKey() default false;

    /**
     * key 解析器
     */
    Class<? extends KeyResolver> keyResolver() default DefaultIdempotentKeyResolver.class;
}
